iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 5
0
AI & Data

一服見效的 AI 應用系列 第 5

Day 05:購物籃分析(Basket Analysis)

  • 分享至 

  • xImage
  •  

前言

前幾篇是以客戶的角度進行的行銷分析,這一篇『購物籃分析』(Basket Analysis)則是以商品的角度行銷,對顧客進行『交叉銷售』(cross selling)或『追加銷售』(up selling),cross selling是推薦顧客相關的商品,例如,牙刷與牙膏,而up selling 則是推薦顧客一個更好、更貴(我自己加的)的商品。最經典的例子,就是尿布與啤酒,WalMart發現美國年輕的夫妻在週五晚上去超市採購時,如果買了尿布,也會買啤酒,為什麼呢? 經過調查,周末時他們會帶幼兒去郊外野餐,所以,會同時購買者兩項商品,因此,WalMart就將尿布與啤酒擺在同一個櫃位,以方便顧客一起購買,這就是所謂的『交叉銷售』(cross selling),而要找出商品關聯的其中一項技術就是『購物籃分析』。

『購物籃』一詞早已落伍,現在超市都是『購物車』(Shopping cart),可見這個演算法很早就被發明,但是,還是非常實用,只要能找出商品採買的關聯性,就可進而利用各種策略提高公司的營收。下圖就是很好的例子:

  1. 洗滌劑要放在哪裡,可以賣得最好?
  2. 如果顧客同時買了洗滌劑及果汁,他們是否會再買窗戶清潔劑?
  3. 蘇打水與香蕉是否會同時購買? 蘇打水品牌是否有影響?
  4. 鄰近的商品特性是否會影響顧客的採買內容?

https://ithelp.ithome.com.tw/upload/images/20190914/20001976TQBErOgNHn.jpg
圖片來源:Effective Cross Selling using Market Basket Analysis

『購物籃分析』(Basket Analysis)

購物籃分析,也稱為關聯分析(Affinity Analysis or Association Rule),要找出這種關聯,不需要高深的數學,只要一些簡單的統計,就可以挖掘出資料的背後隱藏的模式(Pattern)。

購物籃分析通常使用三個統計量:

  1. 支援(Support):購買X的發票個數 / 總發票數
  2. 信心(Confidence):同時購買X及Y的發票個數 / 購買X的發票個數,亦即條件機率P(Y|X),購買X的顧客,有多少顧客也買了Y,Support(X ∩ Y) / Support(X)。
  3. 增益(Lift):P(X ∩ Y) / (P(X) * P(Y)),若值接近1表示X、Y互相獨立,愈高表示關聯性愈強。

公式如下:
https://ithelp.ithome.com.tw/upload/images/20190914/20001976SeBYBeQt9k.png
圖片來源:A Gentle Introduction on Market Basket Analysis — Association Rules

舉一個範例說明,有5個購物籃,分別採買A、B、C、D、E 5種商品,依照公式計算結果如下:
https://ithelp.ithome.com.tw/upload/images/20190914/20001976vTRyGAo2u6.png
圖片來源:A Gentle Introduction on Market Basket Analysis — Association Rules

詳細說明請參閱『關聯規則學習』

實作

首先,安裝一個很棒的套件 -- mlxtend
pip install mlxtend

我們一樣使用 UCI 資料集 -- Online Retail.xlsx。

  1. 讀取檔案
import pandas as pd
df = pd.read_excel('./Online Retail.xlsx')
df.info()
  1. 資料清理。
df['Description'] = df['Description'].str.strip()
df.dropna(axis = 0, subset=['InvoiceNo'], inplace = True)
df['InvoiceNo'] = df['InvoiceNo'].astype('str')
# 去除退貨記錄
df = df[~df['InvoiceNo'].str.contains('C')]

https://ithelp.ithome.com.tw/upload/images/20190914/20001976psba66hwsJ.png

  1. 只採用法國的購買紀錄,依發票及品名小計購買數量。
basket_fr = (df[df['Country']=="France"]
          .groupby(['InvoiceNo', 'Description'])['Quantity']
          .sum().unstack().reset_index().fillna(0)
          .set_index('InvoiceNo'))
basket_fr.head(10)
  1. 結果是一個很大的稀疏矩陣(Sparse Matrix)。
basket_fr[basket_fr>0].head(10)

https://ithelp.ithome.com.tw/upload/images/20190914/20001976L7Hknu2iIY.png
5. 購物籃分析不考慮數量,將數量>0的值全部轉為1。

def sum_to_boolean(x):
    if x<=0:
        return 0
    else:
        return 1
basket_fr_final = basket_fr.applymap(sum_to_boolean)
basket_fr_final.head(10)
  1. 使用套件
from mlxtend.frequent_patterns import association_rules
from mlxtend.frequent_patterns import apriori
  1. 僅考慮暢銷的商品,篩選 Support > %6 的資料。
frequent_itemsets_fr = apriori(basket_fr_final, min_support = 0.06,
  use_colnames = True)
frequent_itemsets_fr.sort_values('support', ascending = False).head()

https://ithelp.ithome.com.tw/upload/images/20190914/20001976w2jThdXVP6.png
圖.Support列表,顯示Support強的商品。

  1. 使用 association rules 找出關聯性,並依照增益排序。
a_rules = association_rules(frequent_itemsets_fr, metric = "lift", min_threshold = 1)
a_rules.sort_values('lift',ascending = False)

https://ithelp.ithome.com.tw/upload/images/20190914/20001976zOsMwOa3aj.png
圖.關聯性列表,第1欄與第2欄就是關聯性強的商品組合,後面欄位就是商品組合的統計量。

  1. 上表僅照增益排序,只是代表商品組合性強,不代表關聯的商品是熱銷商品,例如第一組商品組合(bundle),在統計期間只賣出27、28個,反之第51列,它賣出52個。
print( basket_fr_final['CHILDRENS CUTLERY SPACEBOY'].sum())
print( basket_fr_final['CHILDRENS CUTLERY DOLLY GIRL'].sum())
print(a_rules.iloc[50])
basket_fr_final['SET/20 RED RETROSPOT PAPER NAPKINS'].sum()

所以,不只要找商品組合性強,還要會熱銷的商品推薦給顧客,才能發大財。

** 以上程式修改自『Market Basket Analysis』。 **

結語

知道這些高關聯性的商品組合,我們就可以採取下列措施,來增加我們的營收:

  1. 同一組合的商品擺在一起,方便顧客一起提貨。
  2. 商品組合進行特價促銷,由於關聯性強,顧客一起採購的意願相對增強。
  3. 網站銷售時,當使用者瀏覽一項商品時,網頁就推薦同一組合的其他商品。

這篇文章有幾個東西沒解釋,我們留待下篇說明,讀者可參考『Association rule learning』

  1. apriori 演算法
  2. 槓桿(Leverage)、信念(Conviction) 統計量

另外,本文也未作完整的資料探索與分析(EDA),有興趣的讀者可參考『A Gentle Introduction on Market Basket Analysis — Association Rules』

相關程式碼放在這裡 的 Day05 Basket Analysis 目錄。


上一篇
Day 04:客戶留存率與流失率 -- 同類群組分析(Cohort Analysis)
下一篇
Day 06:購物籃分析背後的演算法 -- Apriori
系列文
一服見效的 AI 應用14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言